# coding= utf-8
# python 进阶
prices = {
    'AAPL': 191.88,
    'GOOG': 1186.96,
    'IBM': 149.24,
    'ORCL': 48.44,
    'ACN': 166.89,
    'FB': 208.09,
    'SYMC': 21.29
}
# 生成式（推导式）可以用来生成列表、集合和字典
# prices2 = {key:value for key,value in prices.items() if value >100}
# print(prices2)

# names = ['关羽', '张飞', '赵云', '马超', '黄忠']
# courses = ['语文', '数学', '英语']

# for i in names:
#     for j in courses:
#         print(i,j)

# names = ['关羽', '张飞', '赵云', '马超', '黄忠']
# courses = ['语文', '数学', '英语']
# # 录入五个学生三门课程的成绩
# # 错误 - 参考http://pythontutor.com/visualize.html#mode=edit
# # scores = [[None] * len(courses)] * len(names)
# scores = [[None] * len(courses) for _ in range(len(names))]
# for row, name in enumerate(names):
#     for col, course in enumerate(courses):
#         scores[row][col] = float(input(f'请输入{name}的{course}成绩: '))
#         print(scores)

"""
迭代工具模块
"""
import itertools

# 产生ABCD的全排列
a = itertools.permutations('ABCD')
# 产生ABCDE的五选三组合
b = itertools.combinations('ABCDE', 3)
# 产生ABCD和123的笛卡尔积
c = itertools.product('ABCD', '123')
# 产生ABC的无限循环序列
d =itertools.cycle(('A', 'B', 'C'))


# filter() 函数用于过滤序列，过滤掉不符合条件的元素，返回一个迭代器对象，如果要转换为列表，可以使用 list() 来转换。
# 该接收两个参数，第一个为函数，第二个为序列，序列的每个元素作为参数传递给函数进行判断，然后返回 True 或 False，最后将返回 True 的元素放到新列表中。
items1 = list(map(lambda x: x ** 2, filter(lambda x: x % 2, range(1, 10))))
items2 = [x ** 2 for x in range(1, 10) if x % 2]
print('items1:',items1)
print('items2:',items2)


sum = lambda x,y: x+y
print(sum(1,4))

item1 = [x**2 for x in range(1,10) if x%2]
item2 = list(map(lambda x:x**2,filter(lambda x : x % 2,range(1,10))))
print('item1:',item1)
print('item2:',item2)

# enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列，同时列出数据和数据下标
seq = ['one', 'two', 'three']
for i,element in enumerate(seq):
    print(i,element)

a = lambda x:x%2
print(a(9))